// API使用示例 - 展示如何正确调用后端接口
import { 
  userLogin, 
  uploadImages, 
  imageAnalysis, 
  generateImages, 
  selectImage, 
  generateText, 
  createVideoTask, 
  queryVideoTask,
  pollVideoTaskStatus,
  isLoggedIn,
  getCurrentUserId,
  logout
} from './backendApi';

/**
 * 完整的使用流程示例
 */
export async function completeWorkflowExample() {
  try {
    // 1. 用户登录（获取token）
    console.log('开始用户登录...');
    const loginResult = await userLogin('your_douyin_code_here');
    console.log('登录成功:', loginResult);
    
    // 2. 上传图片
    console.log('开始上传图片...');
    const portraitImage = await selectImageFile(); // 选择人物照
    const exhibitionImages = await selectMultipleImageFiles(); // 选择看展照
    
    const uploadResult = await uploadImages(portraitImage, exhibitionImages, 'example_record_id');
    console.log('图片上传成功:', uploadResult);
    
    // 3. 图片分析
    console.log('开始图片分析...');
    const analysisResult = await imageAnalysis(
      uploadResult.portraitImageId, 
      uploadResult.exhibitionImageIds
    );
    console.log('图片分析完成:', analysisResult);
    
    // 4. 生成风格化图片
    console.log('开始生成风格化图片...');
    const generateResult = await generateImages(analysisResult.analysisId);
    console.log('风格化图片生成完成:', generateResult);
    
    // 5. 用户选择图片
    console.log('用户选择图片...');
    const selectedImageId = generateResult.generatedImageIds[0]; // 选择第一张
    const selectResult = await selectImage(selectedImageId);
    console.log('图片选择完成:', selectResult);
    
    // 6. 生成文本
    console.log('开始生成文本...');
    const textResult = await generateText(selectResult.selectionId);
    console.log('文本生成完成:', textResult);
    
    // 7. 创建视频生成任务
    console.log('开始创建视频生成任务...');
    const videoTaskResult = await createVideoTask(
      selectResult.selectionId,
      '10秒视频，从人物照平滑过渡到风格化图片，添加印象派笔触动画'
    );
    console.log('视频任务创建成功:', videoTaskResult);
    
    // 8. 轮询查询视频任务状态
    console.log('开始轮询视频任务状态...');
    const finalStatus = await pollVideoTaskStatus(
      getCurrentUserId(),
      videoTaskResult.task_id,
      3000, // 3秒轮询一次
      60    // 最多轮询60次（3分钟）
    );
    
    if (finalStatus.status === 3) {
      console.log('视频生成完成:', finalStatus.videoUrl);
    } else {
      console.log('视频生成失败');
    }
    
    return {
      success: true,
      data: {
        loginResult,
        uploadResult,
        analysisResult,
        generateResult,
        selectResult,
        textResult,
        videoTaskResult,
        finalStatus
      }
    };
    
  } catch (error) {
    console.error('工作流程执行失败:', error);
    return {
      success: false,
      error: error.message
    };
  }
}

/**
 * 检查登录状态示例
 */
export function checkLoginStatusExample() {
  if (isLoggedIn()) {
    const userId = getCurrentUserId();
    console.log(`用户已登录，用户ID: ${userId}`);
    return true;
  } else {
    console.log('用户未登录');
    return false;
  }
}

/**
 * 退出登录示例
 */
export function logoutExample() {
  logout();
  console.log('用户已退出登录');
}

/**
 * 模拟选择图片文件（实际使用时需要替换为真实的文件选择逻辑）
 */
async function selectImageFile() {
  // 这里应该调用uni.chooseImage或其他文件选择API
  // 返回选中的文件对象
  return new File([''], 'portrait.jpg');
}

/**
 * 模拟选择多张图片文件（实际使用时需要替换为真实的文件选择逻辑）
 */
async function selectMultipleImageFiles() {
  // 这里应该调用uni.chooseImage或其他文件选择API
  // 返回选中的文件数组
  return [
    new File([''], 'exhibition1.jpg'),
    new File([''], 'exhibition2.jpg')
  ];
}

/**
 * 单独调用各个接口的示例
 */
export const apiExamples = {
  // 登录示例
  login: async (code) => {
    try {
      const result = await userLogin(code);
      console.log('登录成功:', result);
      return result;
    } catch (error) {
      console.error('登录失败:', error);
      throw error;
    }
  },
  
  // 上传图片示例
  upload: async (portraitImage, exhibitionImages, recordId = null) => {
    try {
      const result = await uploadImages(portraitImage, exhibitionImages, recordId);
      console.log('上传成功:', result);
      return result;
    } catch (error) {
      console.error('上传失败:', error);
      throw error;
    }
  },
  
  // 图片分析示例
  analysis: async (portraitImageId, exhibitionImageIds) => {
    try {
      const result = await imageAnalysis(portraitImageId, exhibitionImageIds);
      console.log('分析完成:', result);
      return result;
    } catch (error) {
      console.error('分析失败:', error);
      throw error;
    }
  },
  
  // 生成图片示例
  generate: async (analysisId) => {
    try {
      const result = await generateImages(analysisId);
      console.log('生成完成:', result);
      return result;
    } catch (error) {
      console.error('生成失败:', error);
      throw error;
    }
  }
};
